iT邦幫忙

2023 iThome 鐵人賽

DAY 7
0

前言
昨天的文章介紹了 Hadoop 的安裝,還沒完成安裝的請參考這裡:Day06 - Hadoop 安裝

Hadoop 共有三種模式,分別是:

  • Local (Standalone) Mode
  • Pseudo-Distributed Mode
  • Fully-Distributed Mode

Local (Standalone) Mode

是 Hadoop 的預設模式,僅在單一個節點上的單個進程中運行,主要用於測試,不會於生產階段中使用。我們跟著官方文件來做一次簡單的 MapReduce的任務:

mkdir input
cp $HADOOP_HOME/etc/hadoop/*.xml input
hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.6.jar grep input output 'dfs[a-z.]+'
cat output/*

在上面的任務中,我們建立 input 資料夾,並將路徑中的配置檔 (xml) 複製到 input 中,接下來執行範例的 MapReduce 程式來找到符合正則表達式的詞語 (dfs 開頭的詞),結果如下:

https://ithelp.ithome.com.tw/upload/images/20230922/20138939bCmh0rpHLO.png

Pseudo-Distributed Mode

偽分佈模式,實際上還是在單一個節點上運行,不過使用多個進程來模擬多個節點,我們一樣跟著官方文件做一次 MapReduce 任務,並且使用 YARN 來做資源管理。

  1. HDFS 配置設定

    • 將下方配置填入etc/hadoop/core-site.xmlfs.defaultFS 屬性用於指定默認的文件系統(通常是 HDFS)的 URL,這邊設為 hdfs://localhost:9000

      <configuration>
          <property>
              <name>fs.defaultFS</name>
              <value>hdfs://localhost:9000</value>
          </property>
      </configuration>
      
    • 將下方配置填入etc/hadoop/hdfs-site.xml,注意這裡的內容跟官方文件不太一樣!我自己照著官方文件做會出現錯誤訊息,顯示 nameNode 與 dataNode 的 clusterID 不一致,找到的解決辦法是定義 nameNode 與 dataNode 的屬性,注意 {{userName}} 要換成自己的使用者名稱。

      <configuration>
          <property>
              <name>dfs.replication</name>
              <value>1</value>
          </property>
          <property>
              <name>dfs.namenode.name.dir</name>
              <value>/home/{{userName}}/hadoop/dfs/name336</value>
          </property>
          <property>
              <name>dfs.datanode.data.dir</name>
              <value>/home/{{userName}}/hadoop/dfs/data336</value>
          </property>
      </configuration>
      

      創建對應的資料夾:

      mkdir -p ~/hadoop/dfs/name336
      mkdir -p ~/hadoop/dfs/data336
      
  2. YARN 配置設定

    • 將下方配置填入etc/hadoop/mapred-site.xml

      <configuration>
          <property>
              <name>mapreduce.framework.name</name>
              <value>yarn</value>
          </property>
          <property>
              <name>mapreduce.application.classpath</name>
              <value>$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/*:$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/lib/*</value>
          </property>
      </configuration>
      
    • 將下方配置填入etc/hadoop/yarn-site.xml

      <configuration>
          <property>
              <name>yarn.nodemanager.aux-services</name>
              <value>mapreduce_shuffle</value>
          </property>
          <property>
              <name>yarn.nodemanager.env-whitelist</name>
              <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_HOME,PATH,LANG,TZ,HADOOP_MAPRED_HOME</value>
          </property>
      </configuration>
      
  3. 啟動 HDFS/YARN

    hdfs namenode -format
    $HADOOP_HOME/sbin/start-dfs.sh
    $HADOOP_HOME/sbin/start-yarn.sh
    hdfs dfs -mkdir -p /user/<username>
    
  4. 執行 MapReduce

    基本上就是重新做一次前面的 MapReduce,差別在於已經有資料夾了所以不用再 mkdir,另外印出結果的指令也不同。

    cp $HADOOP_HOME/etc/hadoop/*.xml input
    hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.6.jar grep input output 'dfs[a-z.]+'
    
    # 印出結果
    # 方法1: 先把結果從 dfs 拿出來再印
    hdfs dfs -get output output
    cat output/*
    # 方法2: 直接從 dfs 印出節果
    hdfs dfs -cat output/*
    

    執行結果如下,可以看到因為我們更新了一些配置,因此執行結果也有所改變。

    https://ithelp.ithome.com.tw/upload/images/20230922/20138939Sg08i35kCN.png

  5. 終止 HDFS/YARN

    $HADOOP_HOME/sbin/stop-dfs.sh  # 終止 HDFS
    $HADOOP_HOME/sbin/stop-yarn.sh # 終止 YARN
    $HADOOP_HOME/sbin/stop-all.sh  # 終止 全部
    

Fully-Distributed Mode

真正的分佈式模式,運行在多個節點上形成集群,細節可以參考 Hadoop Cluster Setup,因為接下來的內容比較不會碰到這部分所以先容我省略XD,有時間再深入寫這一塊!

預告

下一篇會介紹 HDFS 的基本操作以及如何使用 Python API 操作 HDFS。

ps. 其實這篇跟前一篇的安裝原本是想要寫在一起,畢竟官方文件都寫在一起了,但實際在安裝跟配置的時候,總是會碰到一些「為什麼會這樣?」的時候,因此雖然兩篇的篇幅都不長,決定多留給大家一些解決問題的時間(才不是什麼文章寫不完呢 😉)

參考資料

Hadoop: Setting up a Single Node Cluster.
Install Hadoop 3.3.2 in WSL on Windows


上一篇
Day06 - Hadoop 安裝
下一篇
Day08 - HDFS 基本操作 (FileSystem Shell & Python)
系列文
30天認識主流大數據框架:Hadoop + Spark + Flink30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言